package com.zhz.leetcode;

/**
 * 7. 整数反转
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * 如果反转后整数超过 32 位的有符号整数的范围[−231, 231− 1] ，就返回 0。
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 * <p>
 * 示例 1：
 * 输入：x = 123
 * 输出：321
 * <p>
 * 示例 2：
 * 输入：x = -123
 * 输出：-321
 * <p>
 * 示例 3：
 * 输入：x = 120
 * 输出：21
 * <p>
 * 示例 4：
 * 输入：x = 0
 * 输出：0
 * <p>
 * 提示：
 * -231 <= x <= 231 - 1
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-integer
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class ReverseInteger7 {

    public static void main(String[] args) {
        ReverseInteger7 m = new ReverseInteger7();
        int x = (int) Math.pow(2, 31) - 1;
//        int res = m.reverse(-2147483648);
        int res = m.reverse1(-2233);
        System.out.println(res);
    }

    public int reverse(int x) {
        boolean b = x >= 0;
        x = Math.abs(x);
        char[] arr = (x + "").toCharArray();
        int left = 0, right = arr.length - 1;
        while (left < right) {
            char a = arr[right];
            arr[right--] = arr[left];
            arr[left++] = a;
        }
        String ss = new String(arr);
        try {
            return b ? Integer.parseInt(ss) : -Integer.parseInt(ss);
        } catch (Exception e) {
            return 0;
        }
    }

    /**
     *
     */
    public int reverse1(int x) {
        int res = 0;
        while (x != 0) {
            int t = x % 10;
            int newRes = res * 10 + t;
            if ((newRes - t) / 10 != res)
                return 0;
            res = newRes;
            x = x / 10;
        }
        return res;
    }
}
